<?php /* 
==================================================
TextCMS -- simple plain/text CMS with GPL licence
WYSIWYG editors support module
(c) 2008, 2009, 4X_Pro
Visit us online: http://textcms.ru
==================================================
TODO:
Поддержка TinyMCE
Поддержка FCKEdit
Поддержка jQuery Editor
*/

/** Выдача списка поддерживаемых WYSIWYG-редакторов **/
function wysiwyg_list() {
  $result=array();
  if (is_file('js/wymedit/jquery.wymeditor.pack.js')) $result['wymedit']='WYMeditor';
  if (is_file('js/nicedit/nicEdit.js')) $result['nicedit']='NicEdit';
  if (is_file('js/markitup/jquery.markitup.pack.js')) $result['markitup']='Mark it up!';
  // сюда в дальнейшем добавлять аналогичные проверки для других редакторов
  return $result;
}

/** Формирование JS-кода для отображения WYSIWYG-редактора **/
function wysiwyg_main($name=false) {
  if (isset($_REQUEST['nohtml']) && $_REQUEST['nohtml']) return ''; // если включен режим "без визуального редактора"
  if ($GLOBALS['config']['wysiwyg']=='wymedit') {
    cms_jscript('jquery.js','jquery-ui.js');
    cms_jscript('wymedit/jquery.wymeditor.pack.js',      
      '/wymedit/plugins/resizable/jquery.wymeditor.resizable.js');
    if (!$name) $name='textarea';
    else $name='#'.$name;
    if (isset($GLOBALS['wysiwyg_options']['css'])) $css='stylesheet : "'.$GLOBALS['wysiwyg_options']['css'].'", ';
    else $css='';
    global $sitepath;

    $linksopt='';
    if (cms_module_load('menu')) {
      $items=menu_pages_get('/');
      $cur=array();
      $max=array();
      for ($i=0, $count=count($items); $i<$count; $i++) {
        $cur[$items[$i]['url']]=$items[$i]['sort'];
        $dirname=dirname($items[$i]['url']);
        if ($dirname=='\\') $dirname='/';
        $max[$dirname]=(isset($max[$dirname]) && $max[$dirname]>$items[$i]['sort']) ? $max[$dirname] : $items[$i]['sort'];
        $tmpurl=$items[$i]['url'];
        if (substr($tmpurl,-1,1)=='/' && $tmpurl!='/') $tmpurl=substr($tmpurl,0,-1);
        $items[$i]['whitespace']=str_repeat('&nbsp;&nbsp;&nbsp;', substr_count($tmpurl,'/')-1);
      }

      for ($i=0;$i<$count;$i++) {
        $items[$i]['floatsort']=_admcont_floatsort($items[$i]['url'],$max,$cur);
      }

      if (is_array($items)) {
        usort($items,create_function('$a,$b','return ($a["floatsort"]>$b["floatsort"]) ? -1 : ($a["floatsort"]==$b["floatsort"]) ? 0 : 1;'));
      }

      for ($i=0;$i<$count;$i++) {
        if ($items[$i]['state']==0) $linksopt.='<option value="'.$items[$i]['url'].'">'.$items[$i]['whitespace'].htmlspecialchars($items[$i]['title']).'</option>';
      }
    }

    $linkhtml=<<< EODLG
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<html dir='ltr'><head><link rel='stylesheet' type='text/css' media='screen' href='${sitepath}js/wymedit/skins/default/skin.css' />
<title>Ссылка</title><script type='text/javascript' src='/Flash/TextCMS/js/jquery.js'></script>
<script type='text/javascript' src='${sitepath}js/wymedit/jquery.wymeditor.pack.js'></script></head>
<body class='wym_dialog wym_dialog_link' onload='WYMeditor.INIT_DIALOG(0)'>
<form><fieldset><input type='hidden' class='wym_dialog_type' value='Link' /><legend>Ссылка</legend>
<div class='row'><label for='href'>URL:</label><input type='text' class='wym_href' value='' size='40' id='href' /></div>
<div style="font-size: 80%; color: #888; text-align: center"><small>Для автоматического вычисления адреса страницы относительно корня с учетом настроект человеко-читаемых URL используйте конструкцию вида ##hurl[URL_страницы]#</small></div>
<div class='row'><label for='page_selector'>Страницы сайта:</label>
<select style="width: 280px" class='wym_title' id='page_selector' onChange='if (this.selectedIndex &gt; 0) document.getElementById("href").value="##hurl["+this.value+"]#"'/><option value='' selected='selected'>-- Выберите страницу --</option>$linksopt</select></div>
<div class='row'><label for='title'>Заголовок:</label><input type='text' class='wym_title' value='' size='40' id='title' /></div>
<div class='row row-indent'><input class='wym_submit' type='button' value='Отправить' />
<input class='wym_cancel' type='button'value='Отмена' /></div></fieldset>
</form></body></html>
EODLG;
    $linkhtml=str_replace("\n","\\\n",str_replace("\r\n","\n",$linkhtml));
    $linkhtml=str_replace('"','\\"',$linkhtml);
    $linkhtml=str_replace('script','scr"+"ipt',$linkhtml);
    $result='<script type="text/javascript"><!--
jQuery(function() {
    jQuery("'.$name.'").wymeditor({
      lang: "ru",
      '.$css.'
      dialogLinkHtml : "'.$linkhtml.'",
      postInit: function(wym) {
        wym.resizable();
      }
    });
});  
--></script>';
  }
  elseif ($GLOBALS['config']['wysiwyg']=='nicedit') {
    cms_jscript('nicedit/nicEdit.js');
    if (isset($GLOBALS['wysiwyg_options']['css'])) $css=', externalCSS : "'.$GLOBALS['wysiwyg_options']['css'].'"';
    if (!$name) {
      $result='<script type="text/javascript"><!--
        bkLib.onDomLoaded(function() { nicEditors.allTextAreas()'.$css.' });
--></script>';
    }
    else $result='<script type="text/javascript"><!--
bkLib.onDomLoaded(function() {
        new nicEditor({fullPanel : true, iconsPath : "js/nicedit/nicEditorIcons.gif"'.$css.'}).panelInstance("'.$name.'");
});
--></script>';
  }
  elseif ($GLOBALS['config']['wysiwyg']=='markitup') {
    cms_jscript('jquery.js','markitup/jquery.markitup.pack.js','markitup/sets/html/set.js');
    if (!$name) $name='textarea';
    else $name='#'.$name;
    $result='<script type="text/javascript"><!--
$(document).ready(function()	{
   $("head").append("<link>");
   css = $("head").children(":last");
   css.attr({
      rel:  "stylesheet",
      type: "text/css",
      href: "js/markitup/skins/markitup/style.css"
   });
   $("head").append("<link>");
   css = $("head").children(":last");
   css.attr({
      rel:  "stylesheet",
      type: "text/css",
      href: "js/markitup/sets/html/style.css"
   });
   $("'.$name.'").markItUp(mySettings);
});
--></script>';
  }
  else $result='';
  return $result;
}

/** Выводит редактор MarkItUp при любом включенном визуальном редакторе.
 * Используется в редакторе стилей (модуль style), где требуется невизуальный HTML-редактор
 *
 * @param string $name -- id области для редактирования, в которой должен появиться визуальный редактор
 * @return string -- Java-script код для
 */
function wysiwyg_markup($name=false) {
  $result='';
  if ($GLOBALS['config']['wysiwyg']!='none') {
    $oldvalue=$GLOBALS['config']['wysiwyg'];
    $GLOBALS['config']['wysiwyg']='markitup';
    $result=wysiwyg_main($name);
    $GLOBALS['config']['wysiwyg']=$oldvalue;
  }
  return $result;
}